<!--
 * @Description: 
 * @version: 
 * @Author: 尹鹏孝
 * @Date: 2021-12-30 10:45:04
 * @LastEditors: 尹鹏孝
 * @LastEditTime: 2021-12-31 09:07:48
-->
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>移除元素</title>
</head>

<body>
    <script>
        /* 给你一个数组 nums 和一个值 val，你需要 原地 移除所有数值等于 val 的元素，并返回移除后数组的新长度。
 
        不要使用额外的数组空间，你必须仅使用 $O(1)$ 额外空间并原地修改输入数组。
 
        元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
 
        示例 1: 给定 nums = [3, 2, 2, 3], val = 3, 函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。 你不需要考虑数组中超出新长度后面的元素。
 
        示例 2: 给定 nums = [0, 1, 2, 2, 3, 0, 4, 2], val = 2, 函数应该返回新的长度 5, 并且 nums 中的前五个元素为 0, 1, 3, 0, 4。
 
       你不需要考虑数组中超出新长度后面的元素。*/

        var delArr = function (arr, val) {
            let k = 0;
            for (let i = 0; i < arr.length; i++) {
                if (arr[i] != val) {
                    arr[k++] = arr[i];
                }
            }
            return k;
        }
        let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 1000, 9, 89, 11, 23, 56, 123, 1113, 12, 34, 3, 4, 33, 44, 253, 90];
        console.log(arr);
        console.log(arr.length);
        let ms = delArr(arr, 3);
        console.log(ms);
        arr.length = ms
        console.log(arr);


        // 数组去重
        var removeDuplicates = function (nums) {
            if (nums === null) {
                return;
            }
            if (nums.length == 1) {
                return nums;
            }
            let cur = 1;
            for (let i = 0; i < nums.length; i++) {
                if (nums[i] > nums[cur - 1]) {
                    nums[cur] = nums[i];
                    cur++;
                }

            }
            return cur;
        }

        let me = [1, 9, 2, 3, 23, 23, 23, 324, 23, 3, 4, 334, 23, 334, 6777];
        let result = removeDuplicates(me);
        console.log(result);

        //数组去重
        let myArr2 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0, 1223, 444];
        var myResult2 = function (arr) {
            let r = [];
            while (arr.length) {
                let me = arr.shift();
                /*  if (r.indexOf(me) == -1) {
                     r.push(me);
                 } */
                let res = myIndexOf(me, arr);
                if (res == -1) {
                    r.push(me);
                }
            }
            return r;
        }
        let test2 = myResult2(myArr2);
        console.log(test2);
        function myIndexOf(element, arr) {
            let i = -1;
            if (typeof arr === 'object' && Object.prototype.toString.call(arr) === '[object Array]') {
                if (!arr.length) {
                    return -1;
                }
                for (let j = 0; j < arr.length; j++) {
                    if (arr[j] === element) {
                        i++;
                    }
                }
                return i;
            } else {
                throw new Error('not arr');
            }
        }

        // 数组删除指定元素
        var delElement = function (arr, target) {
            let k = 0;
            for (let i = 0; i < arr.length; i++) {
                if (arr[i] !== target) {
                    arr[k++] = arr[i];
                }
            }
            arr.length = k;
            let result = arr;
            return result;
        }

        let myArr3 = [1, 2, 3, 4, 5, 5, 5, 5, 6, 7, 8, 9, 101, 2, 4, 244, 24, 15, 26, 25, 09, 10, 12, 34, 99999, 888, 97890, 8768];
        let result4 = delElement(myArr3, 5);
        console.log(result4);


    </script>
</body>

</html>